package com.example.api.controller;

import com.example.api.util.HttpRequestUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

/**
 * Create with Intellij idea
 * User:mingtian
 * Date:2018/11/15
 * Time:21:12
 * 在springcloud中，有二种方式调用 rest、fegin客户端
 */
@RequestMapping("/api")
@Api(value = "OrderController", description = "订单服务")
@RestController
public class OrderController {

    /**
     * 由springboot web组件提供   默认整合了ribbon负载均衡器
     * rest 方式底层是httpclient，如果使用rest方式以别名的方式进行调用依赖 需要依赖ribbon负载均衡器(@LoadBalanced )
     */
    @Resource
    private RestTemplate restTemplate;

    @Autowired
    private HttpRequestUtil requestUtil;


    /**
     * 订单服务调用会员服务
     *
     * @return
     */
    @GetMapping("/getOrder")
    @ApiOperation(value = "订单调用会员服务", notes = "订单服务调用会员服务")
    public String getOrder() {
        //有二种方式调用  1.使用服务别名调用 2.直接调用，使用别名去注册中心上获取对应的服务地址
        String url = "http://api-member/member/api/getMember";
        //地址不能写死，应该从注册中心上读取
        ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
        System.out.println("订单服务调用会员服务,result:" + result.getBody());
        return result.getBody();
    }

    /**
     * 订单服务调用会员服务
     *
     * @return
     */
    @GetMapping("/getOrderRest")
    @ApiOperation(value = "订单调用会员服务", notes = "订单服务调用会员服务Rest方式")
    public String getOrderRest() {
        //有二种方式调用  1.使用服务别名调用 2.直接调用，使用别名去注册中心上获取对应的服务地址
        String serviceId = "api-member";
        //地址不能写死，应该从注册中心上读取
        String result = requestUtil.post(serviceId, "member/api/postMember", null, String.class, null);
        System.out.println("订单服务调用会员服务");
        return result;
    }
}
